package com.shujia.this_;

public class Cat {

    String color;
    String name;
    int age;

    /*
    1. 构造方法没有返回值，连void 关键字也没有
    2. 方法名必须和类名相同
    3. 方法体一般都是用来给成员变量赋值的
    4. 如果我们没有自己添加构造方法，系统会默认给我们提供一个无参的构造方法
    5. 如果我们自己添加了构造方法，那么会覆盖掉系统提供的默认的构造方法
    6. 构造方法可以重载
    7. 可以通过this关键来实现构造器相互之间的调用，但是只能放置在构造方法的第一行
     */
    public Cat() {
        // 在构造方法里面可以使用this关键字? 是可以的
        /*
        this表示的是当前对象, 在调用构造方法的时候对象就已经创建好了,
        构造方法仅仅是把对象返回回去, 在调用的代码进行接收
         */
        System.out.println(this);
        System.out.println("cat 的默认构造方法");
    }

    // 构造方法的作用：在调用构造方法返回对象的时候直接对属性值进行初始化
    // color 添加一个"颜色:"前缀
    public Cat(String color) {
        this();// 调用无参构造方法
        this.color = "颜色:" + color;
    }

    public Cat(String color, String name) {
//        this.color = "颜色:" + color;

        // 在构造方法里面调用其他的构造方法, 复用代码
        this(color);
        this.name = name;
    }

    public Cat(String color, String name, int age) {
//        this.color = "颜色:" + color;
//        this.name = name;
        this(color, name);
        this.age = age;
    }

    public void printInfo() {
        System.out.println(color);
        System.out.println(name);
        System.out.println(age);
    }

    public void jump() {
        System.out.println(this);
        System.out.println("猫跳高");
    }

    // getXxx, setXxx, 一般不需要改动
    // shift + alt + s
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
